<?php
/**
 * PrynLib
 * @copyright 2007-2009 Prynel
 * @author Olivier ROGER <roger.olivier@gmail.com>
 * @category libPrynel
 * @package Form
 * @version $Revision: 99 $
 */

/**
 * Element Autocompleter. Permet de définir un champs texte avec une auto complétion. BAsé sur Prototype et scriptaculous
 * @category libPrynel
 * @package Form
 * @subpackage Form_Element
 * @version 1.0.0 
 * @author Olivier ROGER <roger.olivier@gmail.com>
 * @copyright  2007-2009 Prynel
 *       
 *
 */
class Form_Element_AutoCompleter extends Form_Element_Text
{
	
	/**
	 * Class css du div d'autocompletion
	 *
	 * @var string
	 * @access private
	 */
	private $autoCompleteCss;
	
	/**
	 * Url du fichier fournissant les données
	 *
	 * @var string
	 * @access private
	 */
	private $url;
	
	/**
	 * Nom du paramèter envoyé en post
	 *
	 * @var string
	 * @access private
	 */
	private $paramName;
	
	/**
	 * Nombre de caractère mini avant déclenchement de l'autocompletion
	 *
	 * @var int
	 * @access private
	 */
	private $minChar;
	
	/**
	 * Fréquence de rafraichissement de l'input
	 *
	 * @var float
	 * @access private
	 */
	private $frequency;
	
	/**
	 * Paramètres additionnels
	 *
	 * @var array
	 */
	private $params;
	
	/**
	 * Constructeur.
	 *
	 * @param string $nom
	 * @param Form_Form $form
	 */
	public function __construct($nom,$form)
	{
		parent::__construct($nom,$form);
		$this->autoCompleteCss = 'autocomplete';
		$this->paramName 	= 'data';
		$this->minChar 		= 2;
		$this->frequency 	= 0.5;
	}
	
	/**
	 * Défini la class css pour le div autocompletion
	 *
	 * @param string $css
	 * @return Form_Element_AutoCompleter
	 */
	public function setAutoCompleteClass($css)
	{
		$this->autoCompleteCss = $css;
		return $this;
	}
	
	/**
	 * Défini l'adresse du fichier
	 *
	 * @param string $url
	 * @return Form_Element_AutoCompleter
	 */
	public function setUrl($url)
	{
		$this->url = $url;
		return $this;
	}
	
	/**
	 * Défini le nom du paramètre envoyé
	 *
	 * @param string $name
	 * @return Form_Element_AutoCompleter
	 */
	public function setParamName($name)
	{
		$this->paramName = $name;
		return $this;
	}
	
	/**
	 * Défini le nombre de caractère nécessaire
	 *
	 * @param int $char
	 * @return Form_Element_AutoCompleter
	 */
	public function minCharNeeded($char)
	{
		$this->minChar = $char;
		return $this;
	}
	
	/**
	 * Taux de rafraichissement de l'input en sec
	 *
	 * @param float $frq
	 * @return Form_Element_AutoCompleter
	 */
	public function refreshFrequency($frq)
	{
		$this->frequency = $frq;
		return $this;
	}
	
	/**
	 * Ajoute des paramètres
	 *
	 * @param array $tab
	 * @return Form_Element_AutoCompleter
	 */
	public function addParams($tab)
	{
		foreach($tab  as $key => $value)
		{
			$this->params .=$key.'='.$value.'&';
		}
		$this->params = substr($this->params,0,strlen($this->params)-1);
		return $this;
	}
	
	/**
	 * Ecrit l'objet
	 *
	 * @return string
	 */
	public function __toString()
	{
		$field.=parent::__toString();
		$field.="\t".'</p><div id="'.$this->attrs['id'].'_autocomplete" class="'.$this->autoCompleteCss.'"></div><p>'."\n";
		$field.="\t".'<script type="text/javascript">
			<!--
			new Ajax.Autocompleter("'.$this->attrs['id'].'","'.$this->attrs['id'].'_autocomplete","'.$this->url.'",{
			paramName:"'.$this->paramName.'",minChars:'.$this->minChar.',frequency:'.$this->frequency.',paramaters:"'.$this->params.'"});
			-->
		</script>'."\n";
		return $field;
	}
	
}
 ?>